<!DOCTYPE html>   
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html dir="ltr" lang="zh-CN" xmlns:wb="http://open.weibo.com/wb" class="no-js"> <!--<![endif]-->


<!-- BEGIN head -->
<head>

	<!-- Title -->
	<title>Java反编译器剖析（中） - ImportNew</title>
	
	<!-- Meta Tags -->
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	
	<!-- Favicon & Mobileicon -->
	<link rel="shortcut icon" href="http://www.importnew.com/wp-content/uploads/2014/12/d02a42d9cb3dec9320e5f550278911c7.ico" />
	<link rel="apple-touch-icon" href="http://www.importnew.com/wp-content/themes/jobbolev4blog/mobileicon.png" />
	
	<!-- RSS, Atom & Pingbacks -->
		<link rel="alternate" title="ImportNew RSS Feed" href="http://www.importnew.com/feed" />
		<link rel="alternate" title="RSS .92" href="http://www.importnew.com/feed/rss" />
	<link rel="alternate" title="Atom 0.3" href="http://www.importnew.com/feed/atom" />
	<link rel="pingback" href="http://www.importnew.com/xmlrpc.php" />
	
	<!-- Theme Hook -->
	<link rel='stylesheet' id='lightboxStyle-css'  href='http://www.importnew.com/wp-content/plugins/lightbox-plus/css/shadowed/colorbox.css?ver=2.0.2' type='text/css' media='screen' />
<link rel='stylesheet' id='core3.0-css'  href='http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0' type='text/css' media='all' />
<link rel='stylesheet' id='core-Default3.0-css'  href='http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCoreDefault.css?ver=3.0' type='text/css' media='all' />
<link rel='stylesheet' id='theme-Default3.0-css'  href='http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?ver=3.0' type='text/css' media='all' />
<script type='text/javascript' src='http://www.importnew.com/wp-includes/js/jquery/jquery.js?ver=1.7.2'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=4.0.6'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/modernizr.js?ver=2.5.3'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-includes/js/comment-reply.js?ver=3.4.2'></script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.importnew.com/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.importnew.com/wp-includes/wlwmanifest.xml" /> 
<link rel='prev' title='Java反编译器剖析（上）' href='http://www.importnew.com/9155.html' />
<link rel='next' title='Java反编译器剖析（下）' href='http://www.importnew.com/9248.html' />
<link rel='shortlink' href='http://www.importnew.com/?p=9206' />

<!-- All in One SEO Pack 1.6.15.2 by Michael Torbert of Semper Fi Web Design[465,505] -->
<meta name="description" content="在上一篇文章中，我们介绍了翻译器的功能、简单的字节码知识回顾、反编译和栈分析。本文将继续讨论反编译器中对条件表达式、变量类型分析、短路运算符和方法调用在反编译器中的处理。" />
<meta name="keywords" content="decompiler" />
<link rel="canonical" href="http://www.importnew.com/9206.html" />
<!-- /all in one seo pack -->

<!-- Comment Rating plugin Version: 2.9.32 by Bob King, http://wealthynetizen.com/, dynamic comment voting & styling. --> 
<style type="text/css" media="screen">
   .ckrating_highly_rated {background-color:#FFFFCC !important;}
   .ckrating_poorly_rated {opacity:0.6;filter:alpha(opacity=60) !important;}
   .ckrating_hotly_debated {background-color:#FFF0F5 !important;}
</style>


<!-- WP SyntaxHighlighter Ver.1.7.3 CSS for code Begin -->
<style type='text/css'>
.syntaxhighlighter,
.syntaxhighlighter a,
.syntaxhighlighter div,
.syntaxhighlighter code,
.syntaxhighlighter table,
.syntaxhighlighter table td,
.syntaxhighlighter table tr,
.syntaxhighlighter table tbody,
.syntaxhighlighter table thead,
.syntaxhighlighter table caption,
.syntaxhighlighter textarea {
font-size: 12px !important; /* Set the font size in pixels */  
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */  
}
.syntaxhighlighter table caption {
/* For Title(Caption) */  
font-size: 14px !important; /* Set the font size in pixels */  
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */  
}
.syntaxhighlighter.nogutter td.code .line {
/* Set the left padding space when no-gutter in ver. 3.0 */  
padding-left: 3px !important;
}
.syntaxhighlighter {
/* For Chrome/Safari(WebKit) */  
/* Hide the superfluous vertical scrollbar in ver. 3.0 */  
overflow-y: hidden !important;
padding: 1px !important;
}
.widget-area.syntaxhighlighter a,
.widget-area.syntaxhighlighter div,
.widget-area.syntaxhighlighter code,
.widget-area.syntaxhighlighter table,
.widget-area.syntaxhighlighter table td,
.widget-area.syntaxhighlighter table tr,
.widget-area.syntaxhighlighter table tbody,
.widget-area.syntaxhighlighter table thead,
.widget-area.syntaxhighlighter table caption,
.widget-area.syntaxhighlighter textarea {
/* For Widget */  
font-size: 14px !important; /* Set the font size in pixels */  
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */  
}
.widget-area table caption {
/* For Widget */  
/* For Title(Caption) */  
font-size: 10px !important; /* Set the font size in pixels */  
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; /* Set the font type */  
}
</style>
<!-- WP SyntaxHighlighter Ver.1.7.3 CSS for code End -->
	
	<!-- CSS -->
	<link rel="stylesheet" href="http://www.importnew.com/wp-content/themes/jobbolev4blog/style.css" media="screen" />
	<!-- link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Noticia+Text:400,700italic,700,400italic" media="screen" / -->
	<style>
				*::selection { background: #0099cc; }
		*::-moz-selection { background: #0099cc; }
		body { background: #ffffff  }
		a, .tabs ul.nav li a:hover, .tabs ul.nav li.active a, .dropcap, .toggle.hover .toggle-title, li.comment cite a:hover, h3.widget-title, .post-meta .meta-title:hover, .the-latest a:hover h4, .aw_socialcounter_widget li a:hover, .aw_tabbed_widget #tab-latest-comments a:hover { color: #0099cc; }
		a:hover { color: #b30000; }
		input:focus, textarea:focus { border-color: #0099cc; }
		#searchsubmit, .highlight, .aw_tabbed_widget .tabs ul.nav li.active a, footer .aw_tabbed_widget .tabs ul.nav li.active a, #top .aw_tabbed_widget .tabs ul.nav li.active a, .aw_tabbed_widget .tabs ul.nav li a:hover, footer .aw_tabbed_widget .tabs ul.nav li a:hover, #top .aw_tabbed_widget .tabs ul.nav li a:hover, .aw_twitter_widget .twitter-icon, .testimonial-icon, #top-closed:hover, .flex-control-nav a:hover, .flex-control-nav a.flex-active { background-color: #0099cc; }
		.submit { background-color: #0099cc; border-color: #007399; }
		.submit:hover { background-color: #b30000; border-color: #860000; }
		#searchsubmit:hover { background-color: #b30000; }
		.toggle.hover .toggle-icon { border-top-color: #0099cc; }
		.toggle.hover.active .toggle-icon { border-bottom-color: #0099cc; }
		.flex-direction-nav li .flex-prev:hover { border-right-color: #0099cc; }
		.flex-direction-nav li .flex-next:hover { border-left-color: #0099cc; }
		@media only screen and (min-width: 768px) and (max-width: 959px) {
			.aw_tabbed_widget .tabs ul.nav li a:hover, .tabs ul.nav li.active a { color: #0099cc; }
		}
		@media screen and (max-width: 767px) {
			.tabs ul.nav li a:hover, .tabs ul.nav li.active a { color: #0099cc; }
		}
	</style>
		
	<!--[if IE 8]>
		<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
		<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
    <![endif]-->

	<!-- Links: RSS + Atom Syndication + Pingback etc. -->
	<link rel="alternate" type="application/rss+xml" title="ImportNew RSS Feed" href="http://www.importnew.com/feed" />
	<link rel="alternate" type="text/xml" title="RSS .92" href="http://www.importnew.com/feed/rss" />
	<link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="http://www.importnew.com/feed/atom" />
	<link rel="pingback" href="http://www.importnew.com/xmlrpc.php" />
    <script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=2606191112" type="text/javascript" charset="utf-8"></script>

<!-- END head -->
</head>

<!-- BEGIN body -->
<body class="single single-post postid-9206 single-format-standard chrome">

		
	
	<!-- BEGIN #top-nav -->
	<nav id="top-nav" class="menu-nav">
		
		<!-- BEGIN .container -->
		<div class="container">

			            <div class="grid-12">
            </div>
			<div class="clear"></div>
		
		</div>
		<!-- END .container -->
    
	</nav>
	<!-- END #top-nav -->
	
	  	
	<!-- BEGIN #wrapper -->
	<div id="wrapper" class="container">

		<!-- BEGIN header -->
		<header>
		
						
			<div class="header-wrapper">
								
				<!-- BEGIN #logo -->
				<div id="logo" class="leaderboard-true">
				
										<a  href="http://www.importnew.com"><img src="http://www.importnew.com/wp-content/uploads/2014/12/6c537425c9ad078efe656a346e5facec.png" width="137" height="85" alt="ImportNew"/></a>
									
				</div>
				<!-- END #logo -->
				
				<!-- BEGIN #leaderboard -->
				<div id="leaderboard">
				
									
				</div>
				<!-- END #leaderboard -->
				
				<div class="clear"></div>
			
			</div>
			
						
			<div class="clear"></div>
			
			<!-- BEGIN #main-nav -->
			<nav id="main-nav" class="grid-12 menu-nav">

				<div class="menu-main-container"><ul id="main-nav-menu" class="menu"><li id="menu-item-14265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14265"><a  href="http://www.importnew.com/">首页</a></li>
<li id="menu-item-14278" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-14278"><a  href="http://www.importnew.com/all-posts">所有文章</a></li>
<li id="menu-item-858" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-858"><a  href="http://www.importnew.com/cat/news">资讯</a></li>
<li id="menu-item-1120" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1120"><a  href="http://www.importnew.com/cat/web-development">Web</a></li>
<li id="menu-item-1923" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1923"><a  href="http://www.importnew.com/cat/architecture">架构</a></li>
<li id="menu-item-832" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-832"><a  href="http://www.importnew.com/cat/basic">基础技术</a></li>
<li id="menu-item-836" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-836"><a  href="http://www.importnew.com/cat/books">书籍</a></li>
<li id="menu-item-2183" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2183"><a  href="http://www.importnew.com/cat/tutorial">教程</a></li>
<li id="menu-item-14282" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14282"><a  href="http://top.jobbole.com" class="external" rel="nofollow" target="_blank">我要投稿</a></li>
<li id="menu-item-14283" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14283"><a  href="#">更多频道 ></a>
<ul class="sub-menu">
	<li id="menu-item-14284" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14284"><a  href="http://ios.jobbole.com" class="external" rel="nofollow" target="_blank">iOS</a></li>
	<li id="menu-item-14286" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14286"><a  href="http://python.jobbole.com" class="external" rel="nofollow" target="_blank">Python</a></li>
	<li id="menu-item-14285" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14285"><a  href="http://android.jobbole.com" class="external" rel="nofollow" target="_blank">Android</a></li>
	<li id="menu-item-14287" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14287"><a  href="http://web.jobbole.com" class="external" rel="nofollow" target="_blank">Web前端</a></li>
</ul>
</li>
</ul></div>				
				<div class="clear"></div>
            
			</nav>
			<!-- END #main-nav -->
			
			<div class="clear"></div>
		
		</header>
		<!-- END header -->
		
		

<!-- BEGIN .grid-8 -->
<div class="grid-8">

		
	<!-- BEGIN .post -->
<div class="post-9206 post type-post status-publish format-standard hentry category-basic tag-decompiler odd" id="post-9206">
	
	<!-- BEGIN .entry-header -->
	<div class="entry-header">
	
				
		<h1>Java反编译器剖析（中）</h1>
		
							
	</div>
	<!-- BEGIN .entry-header -->
	
	<!-- BEGIN .entry-meta -->
	<div class="entry-meta">
	
		<p class="entry-meta-hide-on-mobile">2014/02/06 | 分类： <a  href="http://www.importnew.com/cat/basic" title="查看 基础技术 中的全部文章" rel="category tag">基础技术</a> | <a  href="http://www.importnew.com/9206.html#respond" title="《Java反编译器剖析（中）》上的评论">0 条评论</a>

		 | 标签： <a  href="http://www.importnew.com/tag/decompiler">Decompiler</a></p>
<!-- JiaThis Button BEGIN -->
<div class="jiathis_style" style="display: block; margin: 0 0px; clear: both;"><span class="jiathis_txt">分享到：</span>
<a class="jiathis_button_tsina"></a>
<a class="jiathis_button_weixin"></a>
<a class="jiathis_button_qzone"></a>
<a class="jiathis_button_fb"></a>
<a class="jiathis_button_renren"></a>
<a class="jiathis_button_douban"></a>
<a class="jiathis_button_readitlater"></a>
<a class="jiathis_button_evernote"></a>
<a class="jiathis_button_ydnote"></a>
<a href="http://www.jiathis.com/share?uid=1745061" class="jiathis jiathis_txt jiathis_separator jtico jtico_jiathis" target="_blank"></a>
<a class="jiathis_counter_style"></a>
</div>
<!-- JiaThis Button END -->


	</div>
	<!-- END .entry-meta -->

	<!-- BEGIN .entry -->
	<div class="entry">

        
		<div class='copyright-area'>本文由 <a href='http://www.importnew.com'>ImportNew</a> - <a  href="http://www.importnew.com/author/wubai">邬柏</a> 翻译自 <a  target="_blank" href="http://www.javacodegeeks.com/2013/12/anatomy-of-a-java-decompiler.html" class="external" rel="nofollow">javacodegeeks</a>。欢迎加入<a  href="http://www.jobbole.com/groups/6/" class="external" rel="nofollow" target="_blank">翻译小组</a>。转载请见文末要求。</div>
<p>在<a  href="http://www.importnew.com/9155.html">上一篇文章</a>中，我们介绍了翻译器的功能、简单的字节码知识回顾、反编译和栈分析。本文将继续讨论反编译器中对条件表达式、变量类型分析、短路运算符和方法调用在反编译器中的处理。</p>
<h1>条件表达式</h1>
<p>在这里可以决定我们的代码是否使用了三元运算符（<code>?:</code>）：有一个判断条件，条件的每个分支都对同一个栈变量 <code>s{1,2}</code> 进行一次赋值，赋值后两条路径会进行合并。</p>
<p>一旦确定了这个模式，就可直接使用三元表达式。</p>
<table border="1" panel-id="panel-id.0">
<tbody>
<tr>
<th></th>
<th>复制传播后</th>
<th>合并三元表达式</th>
</tr>
<tr>
<td><span> 0<br/> 1<br/> 4<br/> 5<br/> 8<br/> 9<br/> 10<br/> 11<br/> </span></td>
<td><span> <br/> <br/> if (v0 == 0) goto #8<br/> s{1,2} = v1<br/> goto 9<br/> s{1,2} = v2<br/> v3 = s{1,2}</span>return v3</td>
<td><span> <br/> <br/> v3 = v0 != 0 ? v1 : v2<br/> <br/> return v3</span></td>
</tr>
</tbody>
</table>
<p>值得注意的是，作为转换的一部分，我们对 <code>#9</code> 处的条件进行了取反。可以看出 <code>javac</code> 生成的代码对判断条件取反这一行为是有规律的。因此，如果将转换后的条件取反，就可以更加接近原来的代码。</p>
<h1>画外音：类型是什么？</h1>
<p>当处理栈值时，JVM使用了一个比 <code>Java</code> 代码更为简单的类型系统。特别是 <code>boolean</code>、<code>char</code> 和 <code>short</code> 的值都被作为 <code>int</code> 值使用同一指令处理。因此， <code>v0! = 0</code> 可以翻译成：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
v0 != false ? v1 : v2
</pre>
<p><em>或者</em></p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
v0 != 0 ? v1 : v2
</pre>
<p><em>甚至还可以翻译为</em></p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
v0 != false ? v1 == true : v2 == true
</pre>
<p><em>……还有很多其它的翻译结果！</em></p>
<p>在这个例子中，我们很幸运地知道 <code>v0</code> 的精确类型，这个类型包含在<a  href="http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3.3" class="external" rel="nofollow" target="_blank">方法描述</a>中：</p>
<pre class="brush: text; gutter: true; first-line: 1; highlight: []; html-script: false">
descriptor: (ZII)I
    flags: ACC_PUBLIC, ACC_STATIC
</pre>
<p>方法签名由此可以知形式如下：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
public static int plus(boolean, int, int)
</pre>
<p>通过签名还可以知道，<code>v3</code> 是 <code>int</code> 型（而不是 <code>boolean</code> 型）。因为它是返回值，通过描述符已经知道了返回值类型。接下来，还需要翻译：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
v3 =  v0 ? v1 : v2
return v3
</pre>
<p>另外，如果 <code>v0</code> 是一个本地变量（不是形参），可能无法知道其类型是 <code>boolean</code> 而不是 <code>int</code>。还记得我们之前提到的本地变量表，就是包含了原始本地变量名的那个表吗？除了变量名，它还记录了有变量的<em>类型</em>。因此，如果编译时带有debug信息，就可以从本地变量表中知道变量的类型。此外，还有一张 <a  href="http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html" class="external" rel="nofollow" target="_blank">LocalVariableTypeTable</a> 表，此表也包含类似的信息。两者的主要区别在于 <code>LocalVariableTypeTable</code> 包含了泛型信息。然而，由于 <code>LocalVariableTypeTable</code> 中的信息是未经验证的元数据，因此<strong>不能完全依赖这些数据</strong>。一些非常规的混淆器（obfuscator）会在这些表中填入假信息，但是修改后的字节码却依然可以执行！所以请自行决定如何使用这些表。</p>
<h1>短路运算符（<code>‘&amp;&amp;’</code> 和 <code>’||’</code>）</h1>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
public static boolean fn(boolean a, boolean b, boolean c){
    return a || b &amp;&amp; c;
}
</pre>
<p>怎么能更简单呢？不幸的是，关于字节码的理解总是有一点痛苦……</p>
<table border="1" panel-id="panel-id.0">
<tbody>
<tr>
<th></th>
<th>字节码</th>
<th>栈变量</th>
<th>复制传播后</th>
</tr>
<tr>
<td><span> 0<br/> 1<br/> 4<br/> 5<br/> 8<br/> 9<br/> 12<br/> 13<br/> 16<br/> 17<br/> </span></td>
<td><span> iload_0<br/> ifne #12<br/> iload_1<br/> ifeq #16<br/> iload_2<br/> ifeq #16<br/> iconst_1<br/> goto #17<br/> iconst_0<br/> ireturn<br/> </span></td>
<td><span> s0 = v0<br/> if (s0 != 0) goto #12<br/> s1 = v1<br/> if (s1 == 0) goto #16<br/> s2 = v2<br/> if (s2 == 0) goto #16<br/> s3 = 1<br/> goto 17<br/> s4 = 0<br/> return s{3,4}<br/> </span></td>
<td><span><br/> if (v0 != 0) goto #12<br/> <br/> if (v1 == 0) goto #16<br/> <br/> if (v2 == 0) goto #16<br/> s{3,4} = 1<br/> goto 17<br/> s{3,4} = 0<br/> return s{3,4}</p>
</td>
</tr>
</tbody>
</table>
<p>根据选择的路径不同，位于 <code>#17</code> 位置的 <code>ireturn</code> 指令可能返回 <code>s3</code> 或者 <code>s4</code>。我们为其分别命名，然后使用复制传播来消除 <code>s0</code>、<code>s1</code> 和 <code>s2</code>。</p>
<p>接下来，在 <code>#1</code>、<code>#5</code> 和 <code>#7</code> 位置有三个连续的条件。如之前提到的那样，条件分支要么跳转，要么接着执行下一条指令。</p>
<p>上面的字节码包含了一组遵循特定的使用模式，这些模式非常实用：</p>
<table border="1" panel-id="panel-id.0">
<tbody>
<tr>
<th>条件与（&#038;&#038;）</th>
<th>条件或（||）</th>
</tr>
<tr>
<td>T1: <br/>  if (c1) goto L1<br/>  if (c2) goto L2<br/>L1:<br/>  &#8230;<br/>变成了<br/><br/><br/>  if (!c1 &#038;&#038; c2) goto L2<br/>L1:<br/>  &#8230;</td>
<td>T1:<br/>  if (c1) goto L2<br/>  if (c2) goto L2<br/>L1:<br/>  &#8230;<br/>变成了<br/><br/><br/>  if (c1 || c2) goto L2<br/>L1:<br/>  &#8230;</td>
</tr>
</tbody>
</table>
<p>如果考虑上面表中的临近条件组，<code>#1</code> &#8230; <code>#5</code> 不遵循上面任何一种模式，但 <code>#5</code> &#8230; <code>#9</code> 却是一个条件或（||），因此可以进行如下转换：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
 1:  if (v0 != 0) goto #12
 5:  if (v1 == 0 || v2 == 0) goto #16
12:  s{3,4} = 1
13:  goto #17
16:  s{3,4} = 0
17:  return s{3,4}
</pre>
<p>注意：每次转换都可能引入新的转换。这种情况下，可以应用 <code>||</code> 对条件进行重组。现在可以对 <code>#1...#5</code> 应用 <code>&amp;&amp;</code> 模式！通过将这些代码合并为单个条件分支可以进一步简化方法：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
1:  if (v0 == 0 &amp;&amp; (v1 == 0 || v2 == 0)) goto #16
12:  s{3,4} = 1
13:  goto #17
16:  s{3,4} = 0
17:  return s{3,4}
</pre>
<p>这是不是看起来和其他地方很类似？是的，现在这个字节码就符合之前的三元操作符（<code>? :</code>）规则了。我们可以将 <code>#1...#16</code> 缩减为一个独立的表达式，再使用复制传播将 <code>s{3,4}</code> 内联到为 <code>#17</code> 的 <code>return</code> 语句。</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return (v0 == 0 &amp;&amp; (v1 == 0 || v2 == 0)) ? 0 : 1;
</pre>
<p>利用方法描述符和本地变量类型表可以推断变量类型，这样缩减后的表达式如下：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return (v0 == false &amp;&amp; (v1 == false || v2 == false)) ? false : true;
</pre>
<p>好吧，现在的结果比反编译的内容更加精炼了，但是仍然不够美观。让我们看看可以做点什么。首先，折叠比较运算符，比如把 <code>x==true</code> 和 <code>x==false</code> 简写为 <code>x</code> 和 <code>!x</code>。还可以消除三元操作符，比如把 <code>x ? false:true</code> 简写为 <code>!x</code>。</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return !(!v0 &amp;&amp; (!v1 || !v2));
</pre>
<p>如果你还记得你高中的离散数学，那么根据德摩根定理，更进一步可以缩写为：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
!(a || b) --&gt; (!a) &amp;&amp; (!b)
!(a &amp;&amp; b) --&gt; (!a) || (!b)
</pre>
<p>因此，</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return ! ( !v0 &amp;&amp; ( !v1 || !v2 ) )
</pre>
<p>可以变为，</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return ! ( !v0 &amp;&amp; ( !v1 || !v2 ) )
</pre>
<p>接着变成，</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return ( v0 || !(!v1 || !v2 ) )
</pre>
<p>……最终会变成：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
return ( v0 || (v1 &amp;&amp; v2) )
</pre>
<p>万岁！</p>
<h1>处理方法调用</h1>
<p>我们已经了解调用方法的流程：先将参数“存入”本地数组；要进行方法<em>调用</em>，必须将参数推到栈上，并且紧跟一个指向实例方法的 <code>this</code> 指针。方法调用的字节码正如你预想的那样：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
push arg_0
    push arg_1 
    invokevirtual METHODREF
</pre>
<p>在上面的代码中可以看到 <code>invokevirtual</code>，该指令可以用来调用大多数的实例方法。JVM有一组方法调用的指令，每个指令都有特定的功能：</p>
<ol>
<li><code>invokeinterface</code>：调用接口方法。</li>
<li><code>invokevirtual</code>：调用使用 <code>virtual</code> 语义的实例方法，比如调用的方法在运行时根据重载分派到不同的实例方法。</li>
<li><code>invokespecial</code>：调用一个<em>具体的</em>实例方法（非 <code>virtual</code> 语义）。该指令常用来调用构造器（constructor），但也可以调用类似 <code>super.method()</code> 这样的方法。</li>
<li><code>invokestatic</code>：调用静态方法。</li>
<li><code>invokedynamic</code>：使用“引导方法”（bootstrap）启动自定义调用点，该命令（在Java中）很少使用。引入该命令是为了支持动态语言，在Java8中被用来实现lambda表达式。</li>
</ol>
<p>反编译器有一个重要细节，class的<em>常量池</em>中包含了所有方法调用的信息，包括参数的数量、类型和返回值类型。调用的类会记录这些信息，运行时会确保该方法在调用时已存在，并对方法签名进行检查。如果调用的是第三方代码的函数，并且函数的签名发生了改变，任何试图对旧版本的调用都会抛出错误（而不是产生不可预知的行为）。</p>
<p>回到上面的例子，从 <code>invokevirtual</code> 操作码可以得知目标方法是一种实例方法。因此，需要将 <code>this</code> 指针作为隐含的第一参数。常量池中的 METHODREF 告诉我们该这个方法有一个形参，所以除了实例方法的指针还需要从栈上弹出一个参数。接下来代码可以重写为：</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: []; html-script: false">
arg_0.METHODREF(arg_1)
</pre>
<p>当然，不是所有的字节码看起来都如此“友好”。栈中的参数并不要求一个接一个排列整齐。假如参数中有一个三元表达式，那么中间就会有加载、存储和分支指令，这些都需要单独转换。混淆器可能会将方法重写成为一种特别复杂的指令序列。优秀的反编译器需要足够灵活，才能处理很多有趣的边界情形。这些已经超出了本文的讨论内容。</p>
<p>下一篇我们会继续探讨反编译器的更多细节和流程控制。</p>

        
        <div id="text-13">			<div class="textwidget"><p><span><br />
<a  href="https://100offer.com/join/imp" target="_blank" class="external" rel="nofollow"><img src="http://jbcdn2.b0.upaiyun.com/2015/01/c8573fd828815600e38fc52373fd3622.jpg" border="0" /></a><br />
</span></p>
</div>
		</div>
        原文链接： <a  target="_blank" href="http://www.javacodegeeks.com/2013/12/anatomy-of-a-java-decompiler.html" class="external" rel="nofollow">javacodegeeks</a>    翻译： <a  href="http://www.importnew.com"> ImportNew.com </a> - <a  href="http://www.importnew.com/author/wubai">邬柏</a><br/>译文链接： <a  href="http://www.importnew.com/9206.html">http://www.importnew.com/9206.html</a><br/>[ <span style='color:#ff0000'><b>转载请保留原文出处、译者和译文链接。</b></span>]<br/><br/>
	</div>
	<!-- END .entry -->


<!-- JiaThis Button BEGIN -->
<div class="jiathis_style_24x24">
<a class="jiathis_button_tsina"></a>
<a class="jiathis_button_weixin"></a>
<a class="jiathis_button_qzone"></a>
<a class="jiathis_button_fb"></a>
<a class="jiathis_button_renren"></a>
<a class="jiathis_button_douban"></a>
<a class="jiathis_button_googleplus"></a>
<a class="jiathis_button_readitlater"></a>
<a class="jiathis_button_evernote"></a>
<a class="jiathis_button_ydnote"></a>
<a  href="http://www.jiathis.com/share?uid=1745061" class="jiathis jiathis_txt jiathis_separator jtico jtico_jiathis external" target="_blank" rel="nofollow"></a>
<a class="jiathis_counter_style"></a>
</div>


<script type="text/javascript" >
var jiathis_config={
	data_track_clickback:false,
	title:"《Java反编译器剖析（中）》",
	summary:"在上一篇文章中，我们介绍了翻译器的功能、简单的字节码知识回顾、反编译和栈分析。本文将继续讨论反编译器中对条件表达式、变量类型分析、短路运算符和方法调用在反编译器中的处理。",
	pic:"http://cdn1.importnew.com/2013/10/Java-logo.jpg",
	appkey:{
                "tsina":2284713194 //for importnew
        },
	ralateuid:{
		"tsina":2991905905 //for importnew
	},
	hideMore:false
}
</script>
<script type="text/javascript" src="http://v3.jiathis.com/code/jia.js?uid=1745061" charset="utf-8"></script>
<!-- JiaThis Button END -->
<br/><br/>


</div>
<!-- END .post -->		
	<!-- BEGIN #author-bio -->

<div id="author-bio">
	
	<h3 class="widget-title">
	关于作者： <a  href="http://www.importnew.com/author/wubai">邬柏</a>
	（ <a  target="_blank" style="text-decoration: none;" href="http://www.jobbole.com/members/wubai" class="external" rel="nofollow">@wubai</a> ）
	</h3>
	<div class="alignleft">
		<a href="http://www.importnew.com/author/wubai">
					</a>
	</div>
	<p>（新浪微博：<strong><a  href="http://weibo.com/wushaoxia" class="external" rel="nofollow" target="_blank">@Alex_Aisin-Gioro</a></strong>）</p>
	<p>
		<a  style="text-decoration: none;" href="http://www.importnew.com/author/wubai">查看邬柏的更多文章 >> </a>
	</p>
	<div class="clear"></div>
	
</div>

<!-- END #author-bio -->	
	
<script type="text/javascript">
window._wp_rp_static_base_url = "http://dtmvdvtzf8rz0.cloudfront.net/static/";

</script>
<h3  class="related_post_title">相关文章</h3><ul class="related_post wp_rp" style="visibility:visible;"><li position="0"><a  href="http://www.importnew.com/9248.html">Java反编译器剖析（下）</a></li><li position="1"><a  href="http://www.importnew.com/9155.html">Java反编译器剖析（上）</a></li><li position="2"><a  href="http://www.importnew.com/871.html">Java集合框架面试问题集锦</a></li><li position="3"><a  href="http://www.importnew.com/2466.html">深入理解JDBC的超时设置</a></li><li position="4"><a  href="http://www.importnew.com/5270.html">Java JIT编译：不仅仅是个流行词</a></li><li position="5"><a  href="http://www.importnew.com/6374.html">5本最佳的Java面向对象理论和设计模式的书籍</a></li><li position="6"><a  href="http://www.importnew.com/7185.html">Java方法参数太多怎么办—Part5—方法命名</a></li><li position="7"><a  href="http://www.importnew.com/8804.html">Android热点回顾第三期</a></li><li position="8"><a  href="http://www.importnew.com/8935.html">Java应用程序中的内存泄漏及内存管理</a></li><li position="9"><a  href="http://www.importnew.com/14229.html">Java中有关Null的9件事</a></li></ul>

			
	
<!-- BEGIN #respond -->
<div id="respond">

	<h3 class="widget-title">发表评论</h3>
	
	<!-- BEGIN .cancel-comment-reply -->
	<p class="cancel-comment-reply">
		
		<a  rel="nofollow" id="cancel-comment-reply-link" href="/9206.html#respond" style="display:none;">点击这里取消回复。</a>		
	</p>
	<!-- END .cancel-comment-reply -->

		
	<!-- BEGIN #comment-form -->
	<form action="http://www.importnew.com/wp-comments-post.php" method="post" id="comment-form">
		
		<fieldset>
		
			<legend class="none">Comment form</legend>
			
			<!-- BEGIN .container -->
			<div class="container">
			
							
				<div class="grid-4 margin-20">
					<label for="author">Name<span class="red">*</span></label>
				</div>
				
				<div class="grid-4 margin-20">
					<div class="input-wrapper"><input type="text" name="author" id="author" value="" tabindex="1" size="30" class="required" placeholder="姓名" /></div>
				</div>
				<div class="clear"></div>
				
				<div class="grid-4 margin-20">
					<label for="email">邮箱<span class="red">*</span></label>
				</div>
				
				<div class="grid-4 margin-20">
					<div class="input-wrapper"><input type="email" name="email" id="email" value="" tabindex="2" size="30" class="required email" placeholder="请填写邮箱" /></div>
				</div>
				<div class="clear"></div>
				
				<div class="grid-4 margin-20">
					<label for="url">网站 (请以 http://开头)</label>
				</div>
				
				<div class="grid-4 margin-20">
					<div class="input-wrapper"><input type="url" name="url" id="url" value="" tabindex="3" size="30" placeholder="请填写网站地址" /></div>
				</div>
				<div class="clear"></div>
				
								
				<div class="grid-8 margin-20">
					<label for="comment" class="none margin-20">评论内容<span class="red">*</span></label>
					<div class="input-wrapper"><textarea name="comment" id="comment" rows="20" cols="30" class="required" tabindex="4" onkeydown="if(event.ctrlKey && event.keyCode==13){document.getElementById('comment-form-submit').click(); return false;}" placeholder="请填写评论内容" ></textarea></div>
				</div>
				<div class="clear"></div>
				
			</div>
			<!-- END .container -->
			
			<p>(<span class="red">*</span>) 表示必填项</p>
			<p><div class="submit-wrapper"><a id="comment-form-submit" class="submit">提交评论</a></div></p>
			<input type='hidden' name='comment_post_ID' value='9206' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
			<p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="64ebd5a843" /></p>			
		</fieldset>
		
	</form>
	<!-- END #comment-form -->
	
	
</div>
<!-- END #respond -->


			<p class="nocomments none">还没有评论。</p>
	 
<h3 id="comments-from-weibo" class="widget-title">来自微博的评论</h3>
<wb:comments url="http://www.importnew.com/9206.html" border="y" width="auto" color="e8e8e8,ffffff,4c4c4c,5093d5,cccccc,f0f0f0" appkey="2284713194" ralateuid="2991905905" ></wb:comments>



		
				
	<!-- BEGIN .navigation -->
	<div class="navigation margin-20">
	
		<div class="alignleft"><a  href="http://www.importnew.com/9155.html" rel="prev">&laquo; Java反编译器剖析（上）</a></div>
		<div class="alignright"><a  href="http://www.importnew.com/9248.html" rel="next">Java反编译器剖析（下） &raquo;</a></div>
		<div class="clear"></div>

	</div>
	<!-- END .navigation -->
	
		
</div>
<!-- END .grid-8 -->

<!-- BEGIN #sidebar -->
<div id="sidebar" class="grid-4">

	<div id="search-3" class="widget widget_search"><!-- BEGIN #searchform -->
<form method="get" id="searchform" action="http://www.importnew.com/">

	<label class="none" for="s">Search for:</label>
	<div class="input-wrapper"><input type="text" value="" name="s" id="s" placeholder="Search" /></div>
	<input type="submit" id="searchsubmit" value="Search" />
	
</form>
<!-- END #searchform --></div><div id="text-14" class="widget widget_text">			<div class="textwidget"><div class="floated-thumb">
<div class="post-thumb"><img src="http://cdn1.importnew.com/2014/12/f22388b7e2ba59db037aab10f36ddcca.png" width="90" height="90" class="attachment-grid-1 wp-post-image" /></div>
<div class="post-meta">
<p><b>微信关注: ImportNew </b><br /> 分享Java相关的技术文章、工具资源和热点资讯。扫描加关注，碎片时间提高Java开发技能！</p>
</div>
<div class="clear"></div>
</div>
</div>
		</div><div id="text-11" class="widget widget_text">			<div class="textwidget"><p><script language=javascript> 
var randomNum = Math.round(Math.random()*1);
var image=new Array(2);
image[0]="http://jbcdn2.b0.upaiyun.com/2014/12/665f644e43731ff9db3d341da5c827e1.png";
image[1]="http://jbcdn2.b0.upaiyun.com/2014/12/28c8edde3d61a0411511d3b1866f0636.png";
var imageUrl=image[randomNum];
var urls=new Array(2);
urls[0]="http://www.imooc.com/course/programdetail/pid/10?from=importnewweibo";
urls[1]="http://www.imooc.com/course/programdetail/pid/10?from=importnewweibo";
var url = urls[randomNum];
var adHTML = "<a href='"+url+"' target='_blank'><img src='"+imageUrl+"' border='0'></a>";
document.write(adHTML);
</script></p>
</div>
		</div><div id="aw_tabbed_widget-2" class="widget aw_tabbed_widget"><div class="tabs"><ul class="nav clearfix"><li><a  id="link-most-discussed" href="#tab-most-discussed" title="本月热门文章">本月热门文章</a></li><li><a  id="link-latest-comments" href="#tab-latest-comments" title="年度热门文章">年度热门文章</a></li><li><a  id="link-tags" href="#tab-tags" title="热门标签">热门标签</a></li></ul><div id="tab-most-discussed" class="tab"><div class="floated-thumb">							
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">0</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14229.html" title="Java中有关Null的9件事">Java中有关Null的9件事</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">1</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14506.html" title="Java并发的四种风味：Thread、Executor、ForkJoin和Actor">Java并发的四种风味</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">2</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14688.html" title="深入理解java异常处理机制">深入理解java异常处理机制</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">3</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14512.html" title="Java高效读取大文件">Java高效读取大文件</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">4</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14597.html" title="Java中字符串switch的实现细节">Java中字符串switch的实现细节</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">5</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14347.html" title="设计模式问答2">设计模式问答2</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">6</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14588.html" title="Linkedin工程师是如何优化他们的Java代码的">Linkedin工程师如何优化他们的Java代码</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">7</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14393.html" title="优化Java中的多态代码">优化Java中的多态代码</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">8</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14486.html" title="Linux与JVM的内存关系分析">Linux与JVM的内存关系分析</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
							
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">9</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/14465.html" title="Java序列化示例教程">Java序列化示例教程</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
						</div></div><div id="tab-latest-comments" class="tab"><div class="floated-thumb">							
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">0</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/10360.html" title="Java 8简明教程">Java 8简明教程</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">1</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/9162.html" title="Integer.valueOf(String) 方法之惑">Integer.valueOf(String) 方法之惑</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">2</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/12074.html" title="Java程序员们最常犯的10个错误">Java程序员们最常犯的10个错误</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">3</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/10173.html" title="notify和notifyAll的一段代码分析">notify和notifyAll的一段代码分析</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">4</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/10576.html" title="为什么我喜欢Java">为什么我喜欢Java</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">5</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/10620.html" title="Java HashMap的工作原理">Java HashMap的工作原理</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">6</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/9281.html" title="怎么理解Condition">怎么理解Condition</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">7</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/10937.html" title="如何高效地判断数组中是否包含某特定值">如何高效地判断数组中是否包含某特定值</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">8</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/12978.html" title="跟我一起学Spring 3(1)&#8211;为什么要学Spring">跟我一起学Spring 3(1)&#8211;为什么要学Spring</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
													
											
							<!-- BEGIN .post-meta -->
							<div class="post-meta ">
							
								<p>
								    <span class="numb">9</span>
								    <a  class="meta-title" target="_blank" href="http://www.importnew.com/9702.html" title="为什么说Tomcat是一个Web服务器而不是一个应用服务器">为什么说Tomcat不是一个应用服务器</a><br />
								</p>
									
							</div>
							<!-- END .post-meta -->
							
							<div class="clear"></div>
							
						</div></div><div id="tab-tags" class="tab"><p><a  href="http://www.importnew.com/tag/android23days" class="tag-link-240" title="8 个话题" style="font-size: 12.802919708029px;">android23days</a>
<a  href="http://www.importnew.com/tag/android-studio" class="tag-link-177" title="3 个话题" style="font-size: 9.2262773722628px;">Android Studio</a>
<a  href="http://www.importnew.com/tag/android" class="tag-link-36" title="64 个话题" style="font-size: 21.591240875912px;">Android开发</a>
<a  href="http://www.importnew.com/tag/api" class="tag-link-308" title="4 个话题" style="font-size: 10.248175182482px;">API</a>
<a  href="http://www.importnew.com/tag/bug" class="tag-link-34" title="2 个话题" style="font-size: 8px;">BUG</a>
<a  href="http://www.importnew.com/tag/classloader" class="tag-link-281" title="3 个话题" style="font-size: 9.2262773722628px;">ClassLoader</a>
<a  href="http://www.importnew.com/tag/clojure" class="tag-link-90" title="3 个话题" style="font-size: 9.2262773722628px;">Clojure</a>
<a  href="http://www.importnew.com/tag/dalvik" class="tag-link-37" title="2 个话题" style="font-size: 8px;">Dalvik</a>
<a  href="http://www.importnew.com/tag/decompiler" class="tag-link-329" title="3 个话题" style="font-size: 9.2262773722628px;">Decompiler</a>
<a  href="http://www.importnew.com/tag/eclipse" class="tag-link-81" title="21 个话题" style="font-size: 16.788321167883px;">Eclipse</a>
<a  href="http://www.importnew.com/tag/featuredpost" class="tag-link-503" title="5 个话题" style="font-size: 11.065693430657px;">featuredpost</a>
<a  href="http://www.importnew.com/tag/gc" class="tag-link-87" title="22 个话题" style="font-size: 16.992700729927px;">GC</a>
<a  href="http://www.importnew.com/tag/google" class="tag-link-183" title="4 个话题" style="font-size: 10.248175182482px;">Google</a>
<a  href="http://www.importnew.com/tag/google-io-2013" class="tag-link-173" title="4 个话题" style="font-size: 10.248175182482px;">Google I/O 2013</a>
<a  href="http://www.importnew.com/tag/google-play" class="tag-link-48" title="2 个话题" style="font-size: 8px;">Google Play</a>
<a  href="http://www.importnew.com/tag/gradle" class="tag-link-201" title="3 个话题" style="font-size: 9.2262773722628px;">Gradle</a>
<a  href="http://www.importnew.com/tag/hadoop" class="tag-link-140" title="12 个话题" style="font-size: 14.43795620438px;">Hadoop</a>
<a  href="http://www.importnew.com/tag/hashmap" class="tag-link-284" title="7 个话题" style="font-size: 12.29197080292px;">HashMap</a>
<a  href="http://www.importnew.com/tag/hashset" class="tag-link-60" title="3 个话题" style="font-size: 9.2262773722628px;">HashSet</a>
<a  href="http://www.importnew.com/tag/hbase" class="tag-link-128" title="13 个话题" style="font-size: 14.846715328467px;">HBase</a>
<a  href="http://www.importnew.com/tag/hibernate" class="tag-link-109" title="10 个话题" style="font-size: 13.722627737226px;">Hibernate</a>
<a  href="http://www.importnew.com/tag/ide" class="tag-link-168" title="4 个话题" style="font-size: 10.248175182482px;">IDE</a>
<a  href="http://www.importnew.com/tag/intellij" class="tag-link-213" title="4 个话题" style="font-size: 10.248175182482px;">IntelliJ</a>
<a  href="http://www.importnew.com/tag/io" class="tag-link-70" title="3 个话题" style="font-size: 9.2262773722628px;">io</a>
<a  href="http://www.importnew.com/tag/java" class="tag-link-35" title="69 个话题" style="font-size: 22px;">Java</a>
<a  href="http://www.importnew.com/tag/java-7" class="tag-link-57" title="3 个话题" style="font-size: 9.2262773722628px;">java 7</a>
<a  href="http://www.importnew.com/tag/java-8" class="tag-link-50" title="21 个话题" style="font-size: 16.788321167883px;">java 8</a>
<a  href="http://www.importnew.com/tag/java8" class="tag-link-354" title="14 个话题" style="font-size: 15.153284671533px;">java8</a>
<a  href="http://www.importnew.com/tag/java9" class="tag-link-436" title="3 个话题" style="font-size: 9.2262773722628px;">Java9</a>
<a  href="http://www.importnew.com/tag/java10%e5%a4%a7%e4%bc%98%e7%82%b9" class="tag-link-263" title="5 个话题" style="font-size: 11.065693430657px;">Java10大优点</a>
<a  href="http://www.importnew.com/tag/javaee" class="tag-link-379" title="5 个话题" style="font-size: 11.065693430657px;">javaee</a>
<a  href="http://www.importnew.com/tag/java-ee" class="tag-link-248" title="3 个话题" style="font-size: 9.2262773722628px;">Java EE</a>
<a  href="http://www.importnew.com/tag/javaee7" class="tag-link-456" title="5 个话题" style="font-size: 11.065693430657px;">Javaee7</a>
<a  href="http://www.importnew.com/tag/javaee%e4%b8%8emaven%e6%95%99%e7%a8%8b" class="tag-link-462" title="7 个话题" style="font-size: 12.29197080292px;">JavaEE与Maven教程</a>
<a  href="http://www.importnew.com/tag/java-gc" class="tag-link-115" title="3 个话题" style="font-size: 9.2262773722628px;">Java GC</a>
<a  href="http://www.importnew.com/tag/javagc%e4%b8%93%e5%ae%b6" class="tag-link-491" title="5 个话题" style="font-size: 11.065693430657px;">JavaGC专家</a>
<a  href="http://www.importnew.com/tag/jdbc" class="tag-link-122" title="7 个话题" style="font-size: 12.29197080292px;">JDBC</a>
<a  href="http://www.importnew.com/tag/jdk" class="tag-link-44" title="5 个话题" style="font-size: 11.065693430657px;">JDK</a>
<a  href="http://www.importnew.com/tag/junit" class="tag-link-337" title="4 个话题" style="font-size: 10.248175182482px;">JUnit</a>
<a  href="http://www.importnew.com/tag/jvm" class="tag-link-80" title="35 个话题" style="font-size: 19.036496350365px;">JVM</a>
<a  href="http://www.importnew.com/tag/log4j" class="tag-link-117" title="3 个话题" style="font-size: 9.2262773722628px;">log4j</a>
<a  href="http://www.importnew.com/tag/mapreduce" class="tag-link-106" title="7 个话题" style="font-size: 12.29197080292px;">MapReduce</a>
<a  href="http://www.importnew.com/tag/maven" class="tag-link-385" title="8 个话题" style="font-size: 12.802919708029px;">maven</a>
<a  href="http://www.importnew.com/tag/ndk" class="tag-link-97" title="3 个话题" style="font-size: 9.2262773722628px;">NDK</a>
<a  href="http://www.importnew.com/tag/netty" class="tag-link-130" title="9 个话题" style="font-size: 13.313868613139px;">Netty</a>
<a  href="http://www.importnew.com/tag/nio" class="tag-link-69" title="5 个话题" style="font-size: 11.065693430657px;">nio</a>
<a  href="http://www.importnew.com/tag/nio2-0" class="tag-link-116" title="3 个话题" style="font-size: 9.2262773722628px;">NIO2.0</a>
<a  href="http://www.importnew.com/tag/oracle" class="tag-link-153" title="8 个话题" style="font-size: 12.802919708029px;">oracle</a>
<a  href="http://www.importnew.com/tag/restful" class="tag-link-196" title="4 个话题" style="font-size: 10.248175182482px;">RESTful</a>
<a  href="http://www.importnew.com/tag/scala" class="tag-link-89" title="15 个话题" style="font-size: 15.357664233577px;">Scala</a>
<a  href="http://www.importnew.com/tag/scala-tutorial" class="tag-link-155" title="6 个话题" style="font-size: 11.78102189781px;">Scala tutorial</a>
<a  href="http://www.importnew.com/tag/solr" class="tag-link-429" title="6 个话题" style="font-size: 11.78102189781px;">solr</a>
<a  href="http://www.importnew.com/tag/spring" class="tag-link-53" title="35 个话题" style="font-size: 19.036496350365px;">Spring</a>
<a  href="http://www.importnew.com/tag/spring-security" class="tag-link-216" title="5 个话题" style="font-size: 11.065693430657px;">Spring Security</a>
<a  href="http://www.importnew.com/tag/string" class="tag-link-252" title="10 个话题" style="font-size: 13.722627737226px;">String</a>
<a  href="http://www.importnew.com/tag/tomcat" class="tag-link-225" title="7 个话题" style="font-size: 12.29197080292px;">Tomcat</a>
<a  href="http://www.importnew.com/tag/unsafe" class="tag-link-302" title="5 个话题" style="font-size: 11.065693430657px;">Unsafe</a>
<a  href="http://www.importnew.com/tag/web-service" class="tag-link-103" title="4 个话题" style="font-size: 10.248175182482px;">Web Service</a>
<a  href="http://www.importnew.com/tag/web%e6%a1%86%e6%9e%b6" class="tag-link-275" title="3 个话题" style="font-size: 9.2262773722628px;">Web框架</a>
<a  href="http://www.importnew.com/tag/%e4%b9%a6%e7%b1%8d" class="tag-link-40" title="4 个话题" style="font-size: 10.248175182482px;">书籍</a>
<a  href="http://www.importnew.com/tag/%e5%86%85%e5%ad%98%e6%b3%84%e9%9c%b2" class="tag-link-124" title="5 个话题" style="font-size: 11.065693430657px;">内存泄露</a>
<a  href="http://www.importnew.com/tag/%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86" class="tag-link-273" title="10 个话题" style="font-size: 13.722627737226px;">内存管理</a>
<a  href="http://www.importnew.com/tag/%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95" class="tag-link-96" title="3 个话题" style="font-size: 9.2262773722628px;">单元测试</a>
<a  href="http://www.importnew.com/tag/%e5%8f%82%e6%95%b0%e5%a4%aa%e5%a4%9a%e6%80%8e%e4%b9%88%e5%8a%9e" class="tag-link-470" title="8 个话题" style="font-size: 12.802919708029px;">参数太多怎么办</a>
<a  href="http://www.importnew.com/tag/%e5%91%a8%e5%88%8a" class="tag-link-259" title="5 个话题" style="font-size: 11.065693430657px;">周刊</a>
<a  href="http://www.importnew.com/tag/%e5%9e%83%e5%9c%be%e5%9b%9e%e6%94%b6%e6%95%99%e7%a8%8b" class="tag-link-473" title="4 个话题" style="font-size: 10.248175182482px;">垃圾回收教程</a>
<a  href="http://www.importnew.com/tag/%e5%9f%ba%e7%a1%80%e6%8a%80%e6%9c%af" class="tag-link-58" title="53 个话题" style="font-size: 20.773722627737px;">基础技术</a>
<a  href="http://www.importnew.com/tag/%e5%a4%9a%e7%ba%bf%e7%a8%8b" class="tag-link-46" title="10 个话题" style="font-size: 13.722627737226px;">多线程</a>
<a  href="http://www.importnew.com/tag/%e5%ae%89%e5%85%a8" class="tag-link-235" title="4 个话题" style="font-size: 10.248175182482px;">安全</a>
<a  href="http://www.importnew.com/tag/%e5%ae%89%e5%8d%93%e7%83%ad%e7%82%b9" class="tag-link-286" title="5 个话题" style="font-size: 11.065693430657px;">安卓热点</a>
<a  href="http://www.importnew.com/tag/%e5%b7%a5%e5%85%b7" class="tag-link-126" title="4 个话题" style="font-size: 10.248175182482px;">工具</a>
<a  href="http://www.importnew.com/tag/%e5%b9%b6%e5%8f%91" class="tag-link-401" title="4 个话题" style="font-size: 10.248175182482px;">并发</a>
<a  href="http://www.importnew.com/tag/%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b" class="tag-link-64" title="3 个话题" style="font-size: 9.2262773722628px;">并发编程</a>
<a  href="http://www.importnew.com/tag/%e5%ba%8f%e5%88%97%e5%8c%96" class="tag-link-298" title="4 个话题" style="font-size: 10.248175182482px;">序列化</a>
<a  href="http://www.importnew.com/tag/%e5%bc%82%e5%b8%b8%e5%a4%84%e7%90%86" class="tag-link-214" title="13 个话题" style="font-size: 14.846715328467px;">异常处理</a>
<a  href="http://www.importnew.com/tag/%e6%80%a7%e8%83%bd" class="tag-link-47" title="10 个话题" style="font-size: 13.722627737226px;">性能</a>
<a  href="http://www.importnew.com/tag/%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96" class="tag-link-88" title="5 个话题" style="font-size: 11.065693430657px;">性能优化</a>
<a  href="http://www.importnew.com/tag/%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98" class="tag-link-282" title="8 个话题" style="font-size: 12.802919708029px;">性能调优</a>
<a  href="http://www.importnew.com/tag/%e6%8a%80%e6%9c%af%e5%8d%9a%e5%ae%a2" class="tag-link-167" title="3 个话题" style="font-size: 9.2262773722628px;">技术博客</a>
<a  href="http://www.importnew.com/tag/%e6%8e%a5%e5%8f%a3" class="tag-link-245" title="3 个话题" style="font-size: 9.2262773722628px;">接口</a>
<a  href="http://www.importnew.com/tag/%e6%95%99%e7%a8%8b" class="tag-link-156" title="16 个话题" style="font-size: 15.664233576642px;">教程</a>
<a  href="http://www.importnew.com/tag/%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84" class="tag-link-283" title="3 个话题" style="font-size: 9.2262773722628px;">数据结构</a>
<a  href="http://www.importnew.com/tag/%e6%97%a5%e5%bf%97" class="tag-link-29" title="2 个话题" style="font-size: 8px;">日志</a>
<a  href="http://www.importnew.com/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f" class="tag-link-244" title="3 个话题" style="font-size: 9.2262773722628px;">正则表达式</a>
<a  href="http://www.importnew.com/tag/%e6%ad%bb%e9%94%81" class="tag-link-343" title="3 个话题" style="font-size: 9.2262773722628px;">死锁</a>
<a  href="http://www.importnew.com/tag/%e6%af%8f%e5%91%a8%e5%ad%a6%e7%82%b9%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f" class="tag-link-437" title="3 个话题" style="font-size: 9.2262773722628px;">每周学点设计模式</a>
<a  href="http://www.importnew.com/tag/%e6%b3%9b%e5%9e%8b" class="tag-link-246" title="5 个话题" style="font-size: 11.065693430657px;">泛型</a>
<a  href="http://www.importnew.com/tag/%e6%b8%b8%e6%88%8f" class="tag-link-184" title="9 个话题" style="font-size: 13.313868613139px;">游戏</a>
<a  href="http://www.importnew.com/tag/%e7%ad%96%e7%95%a5%e6%a8%a1%e5%bc%8f" class="tag-link-435" title="3 个话题" style="font-size: 9.2262773722628px;">策略模式</a>
<a  href="http://www.importnew.com/tag/%e7%ae%97%e6%b3%95" class="tag-link-270" title="5 个话题" style="font-size: 11.065693430657px;">算法</a>
<a  href="http://www.importnew.com/tag/%e7%ba%bf%e7%a8%8b%e6%b1%a0" class="tag-link-297" title="3 个话题" style="font-size: 9.2262773722628px;">线程池</a>
<a  href="http://www.importnew.com/tag/%e7%bb%88%e6%9e%81%e7%88%b6%e7%b1%bb%e9%97%ae%e7%ad%94" class="tag-link-461" title="5 个话题" style="font-size: 11.065693430657px;">终极父类问答</a>
<a  href="http://www.importnew.com/tag/%e8%a1%8c%e4%b8%9a%e8%b5%84%e8%ae%af" class="tag-link-129" title="4 个话题" style="font-size: 10.248175182482px;">行业资讯</a>
<a  href="http://www.importnew.com/tag/videos" class="tag-link-72" title="3 个话题" style="font-size: 9.2262773722628px;">视频</a>
<a  href="http://www.importnew.com/tag/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f" class="tag-link-30" title="23 个话题" style="font-size: 17.197080291971px;">设计模式</a>
<a  href="http://www.importnew.com/tag/%e8%b0%83%e4%bc%98" class="tag-link-336" title="3 个话题" style="font-size: 9.2262773722628px;">调优</a>
<a  href="http://www.importnew.com/tag/%e9%87%8d%e6%9e%84" class="tag-link-182" title="3 个话题" style="font-size: 9.2262773722628px;">重构</a>
<a  href="http://www.importnew.com/tag/%e9%9b%86%e5%90%88" class="tag-link-311" title="3 个话题" style="font-size: 9.2262773722628px;">集合</a>
<a  href="http://www.importnew.com/tag/%e9%9d%a2%e8%af%95" class="tag-link-31" title="13 个话题" style="font-size: 14.846715328467px;">面试</a>
<a  href="http://www.importnew.com/tag/%e9%9d%a2%e8%af%95%e9%a2%98" class="tag-link-27" title="7 个话题" style="font-size: 12.29197080292px;">面试题</a></p></div></div></div><div id="recent_comments_widget-2" class="widget recent_comments_widget">		<h3 class='widget-title'>最新评论</h3>
		<ul>
		
					
			<li id="rc-comment-291172" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/14512.html#comment-291172" rel="nofollow">Java高效读取大文件</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				RandomAccessFile 操作动态文件，分析日志系统，多线程操作同一文件更高效，方便。								<span class="rc-reviewer"> johnhz</span>
								</div>
			</li>
			
						
			<li id="rc-comment-284624" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/14688.html#comment-284624" rel="nofollow">深入理解java异常处理机制</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				在finally里return, 也是醉了								<span class="rc-reviewer"> Sartner</span>
								</div>
			</li>
			
						
			<li id="rc-comment-283806" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/6164.html#comment-283806" rel="nofollow">Eclipse的调试功能的10个小窍门</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				图片全都显示不出来哦。。								<span class="rc-reviewer"> linago</span>
								</div>
			</li>
			
						
			<li id="rc-comment-283183" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/10360.html#comment-283183" rel="nofollow">Java 8简明教程</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				谢谢楼主的贡献，也谢谢原作者详细的讲解！								<span class="rc-reviewer"> jiangzx</span>
								</div>
			</li>
			
						
			<li id="rc-comment-283176" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/10281.html#comment-283176" rel="nofollow">为什么在密码问题上char[]优先于String？</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				不错，谢谢楼主分享！								<span class="rc-reviewer"> jiangzx</span>
								</div>
			</li>
			
						
			<li id="rc-comment-281788" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/14688.html#comment-281788" rel="nofollow">深入理解java异常处理机制</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				finally里应不应该有return啊？								<span class="rc-reviewer"> benben</span>
								</div>
			</li>
			
						
			<li id="rc-comment-280388" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/14486.html#comment-280388" rel="nofollow">Linux与JVM的内存关系分析</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				大神写的文章								<span class="rc-reviewer"> hc</span>
								</div>
			</li>
			
						
			<li id="rc-comment-280183" class="rc-item rc-comment rc-clearfix">
				<img class="rc-avatar rc-left" width="32" height="32" alt="" src="http://jbcdn2.b0.upaiyun.com/2014/11/cb962c0fddc4ba5282bbf2996f3ee0d2.png">
				<div class="rc-info">
				Re:
				<a  class="rc-post" target="_blank" href="http://www.importnew.com/14512.html#comment-280183" rel="nofollow">Java高效读取大文件</a>
				</div>
				<div class="rc-timestamp"></div>
				<div class="rc-excerpt">
				fileChannel好一些。								<span class="rc-reviewer"> zhao</span>
								</div>
			</li>
			
					
		</ul>
        </div>	
	<!-- BEGIN .container -->
	<div class="container">
	
		<!-- BEGIN .grid-2 -->
		<div class="grid-2">
			
						
		</div>
		<!-- END .grid-2 -->
		
		<!-- BEGIN .grid-2 -->
		<div class="grid-2">
			
						
		</div>
		<!-- END .grid-2 -->
		
		<div class="clear"></div>
			
	</div>
	<!-- END .container -->

</div>
<!-- END #sidebar -->
<div class="clear"></div>	


</div>
<!-- END #wrapper -->

<!-- BEGIN footer -->
<footer>

	<!-- BEGIN .container -->
	<div class="container">
		
		<!-- BEGIN .grid-4 -->
		<div class="grid-4">
			
			<div id="text-15" class="widget widget_text"><h3 class="widget-title">关于ImportNew</h3>			<div class="textwidget"><p>ImportNew 专注于 Java 技术分享。于2012年11月11日 11:11正式上线。是的，这是一个很特别的时刻 :) </p>
<p>ImportNew 由两个 Java 关键字 import 和 new 组成，意指：Java 开发者学习新知识的网站。 import 可认为是学习和吸收， new 则可认为是新知识、新技术圈子和新朋友……</p>
</div>
		</div>			
		</div>
		<!-- END .grid-4 -->
		
		<!-- BEGIN .grid-4 -->
		<div class="grid-4">
			
			<div id="text-16" class="widget widget_text"><h3 class="widget-title">推荐关注</h3>			<div class="textwidget"><p><a  href="http://top.jobbole.com/" target="_blank" class="external" rel="nofollow">头条</a> &#8211; 写了文章？看干货？去头条！<br />
<a  href="http://date.jobbole.com/" target="_blank" class="external" rel="nofollow">相亲</a> &#8211; 为IT单身男女服务的征婚传播平台<br />
<a  href="http://hao.jobbole.com/" target="_blank" class="external" rel="nofollow">资源</a> &#8211; 优秀的工具资源导航<br />
<a  href="http://fanyi.jobbole.com/" target="_blank" class="external" rel="nofollow">翻译</a> &#8211; 活跃 &#038; 专业的翻译小组<br />
<a  href="http://blog.jobbole.com/" target="_blank" class="external" rel="nofollow">博客</a> &#8211; 国内外的精选博客文章<br />
<a  href="http://web.jobbole.com/" target="_blank" class="external" rel="nofollow">前端</a> &#8211; JavaScript, HTML5, CSS<br />
<a  href="http://android.jobbole.com/" target="_blank" class="external" rel="nofollow">安卓</a> &#8211; 专注Android技术分享<br />
<a  href="http://ios.jobbole.com/" target="_blank" class="external" rel="nofollow">iOS</a> &#8211; 专注iOS技术分享<br />
<a  href="http://www.importnew.com/" target="_blank">Java</a> &#8211; 专注Java技术分享<br />
<a  href="http://python.jobbole.com/" target="_blank" class="external" rel="nofollow">Python</a> &#8211; 专注Python技术分享</p>
</div>
		</div>			
		</div>
		<!-- END .grid-4 -->
		
		<!-- BEGIN .grid-4 -->
		<div class="grid-4">
			
			<div id="text-17" class="widget widget_text"><h3 class="widget-title">联系我们</h3>			<div class="textwidget"><p>Email: <a  href="mailto:ImportNew.com@gmail.com">ImportNew.com@gmail.com</a><br />
新浪微博：<a  href="http://weibo.com/importnew" target="_blank" class="external" rel="nofollow">@ImportNew</a><br />
微信号：importnew </p>
<p>反馈建议：ImportNew.com@gmail.com<br />
广告与商务合作QQ：2302462408 </p>
</div>
		</div>			
		</div>
		<!-- END .grid-4 -->
		
		<div class="clear"></div>
	
	</div>
	<!-- END .container -->

	<!-- BEGIN #bottom -->
	<div id="bottom">
	
		<!-- BEGIN .container -->
		<div class="container">
		
			<!-- BEGIN .grid-12 -->
			<div class="grid-12">
	
				<p>&copy; 2015 ImportNew</p>
			
			</div>
			<!-- END .grid-12 -->
			
			<div class="clear"></div>
						
		</div>
		<!-- END .container -->
		
	</div>
	<!-- END #bottom -->
	
</footer>
<!-- END footer -->


	
<!-- Lightbox Plus v2.3 - 2011.08.11 - Message: 0-->
<script type="text/javascript">
jQuery(document).ready(function($){
  $("a[rel*=lightbox]").colorbox({opacity:0.8});
});
</script>

<!-- WP SyntaxHighlighter Ver.1.7.3 Begin -->
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shLegacy.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shAutoloader.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushAppleScript.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushAS3.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushBash.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushColdFusion.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCpp.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCSharp.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCss.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushDelphi.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushDiff.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushErlang.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushGroovy.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJavaFX.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJScript.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPerl.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPhp.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPlain.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPowerShell.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPython.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushRuby.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSass.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushScala.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSql.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushVb.js?ver=3.0"></script>
<script type="text/javascript" src="http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver=3.0"></script>
<script type="text/javascript">//<![CDATA[
	SyntaxHighlighter.autoloader(
	"applescript	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushAppleScript.js?ver=3.0"
	,"as3 actionscript3	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushAS3.js?ver=3.0"
	,"bash shell	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushBash.js?ver=3.0"
	,"cf coldfusion	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushColdFusion.js?ver=3.0"
	,"cpp c	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCpp.js?ver=3.0"
	,"c# c-sharp csharp	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCSharp.js?ver=3.0"
	,"css	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushCss.js?ver=3.0"
	,"delphi pas pascal	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushDelphi.js?ver=3.0"
	,"diff patch	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushDiff.js?ver=3.0"
	,"erl erlang	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushErlang.js?ver=3.0"
	,"groovy	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushGroovy.js?ver=3.0"
	,"java	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJava.js?ver=3.0"
	,"jfx javafx	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJavaFX.js?ver=3.0"
	,"js jscript javascript	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJScript.js?ver=3.0"
	,"perl pl	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPerl.js?ver=3.0"
	,"php	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPhp.js?ver=3.0"
	,"plain text	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPlain.js?ver=3.0"
	,"ps powershell	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPowerShell.js?ver=3.0"
	,"py python	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPython.js?ver=3.0"
	,"rails ror ruby rb	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushRuby.js?ver=3.0"
	,"sass scss	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSass.js?ver=3.0"
	,"scala	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushScala.js?ver=3.0"
	,"sql	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushSql.js?ver=3.0"
	,"vb vbnet	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushVb.js?ver=3.0"
	,"xml xhtml xslt html	http://www.importnew.com/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver=3.0"
	);
	SyntaxHighlighter.defaults['auto-links'] = false;
	SyntaxHighlighter.defaults['quick-code'] = true;
	SyntaxHighlighter.defaults['title'] = '';
	SyntaxHighlighter.defaults['class-name'] = 'notranslate';
	SyntaxHighlighter.defaults['collapse'] = false;
	SyntaxHighlighter.defaults['first-line'] = 1;
	SyntaxHighlighter.defaults['gutter'] = true;
	SyntaxHighlighter.defaults['pad-line-numbers'] = false;
	SyntaxHighlighter.defaults['smart-tabs'] = true;
	SyntaxHighlighter.defaults['tab-size'] = 4;
	SyntaxHighlighter.defaults['toolbar'] = false;
 SyntaxHighlighter.config.stripBrs = true;
	SyntaxHighlighter.config.strings.expandSource = '+ expand source';
	SyntaxHighlighter.config.strings.help = '?';
	SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n';
	SyntaxHighlighter.config.strings.noBrush = "Can't find brush for: ";
	SyntaxHighlighter.config.strings.brushNotHtmlScript = "Brush wasn't configured for html-script option: ";
	SyntaxHighlighter.all();
	dp.SyntaxHighlighter.HighlightAll('code')
//]]></script>
<!-- WP SyntaxHighlighter Ver.1.7.3 End -->
<link rel='stylesheet' id='wp_rp_scrollup-css'  href='http://dtmvdvtzf8rz0.cloudfront.net/static/css-img/scrollup.css?ver=3.4.2' type='text/css' media='all' />
<script type='text/javascript' src='http://www.importnew.com/wp-content/plugins/comment-rating/ck-karma.js?ver=3.4.2'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/plugins/lightbox-plus/js/jquery.colorbox-min.js?ver=1.3.17.2'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var viewsCacheL10n = {"admin_ajax_url":"http:\/\/www.importnew.com\/wp-admin\/admin-ajax.php","post_id":"9206"};
/* ]]> */
</script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/plugins/wp-postviews/postviews-cache.js?ver=1.64'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/ready.js?ver=1.0'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/easing.js?ver=1.3'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/superfish.js?ver=1.4.8'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/validate.js?ver=1.9.0'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/touchwipe.js?ver=1.1.1'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/caroufredsel.js?ver=5.5.0'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/flexslider.js?ver=2.0'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/jplayer.js?ver=2.1.0'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/fitvids.js?ver=1.0'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/selectnav.js?ver=0.1'></script>
<script type='text/javascript' src='http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/js/effects.js?ver=1.0'></script>
<script type='text/javascript' src='http://dtmvdvtzf8rz0.cloudfront.net/static/js/scrollup.js?ver=3.4.2'></script>


<div id="full-btm" style="position:fixed; left:50%; top:550px;  z-index:100; text-align:center; cursor:pointer;">
<a><img src="http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/img/back-btm.png" width="20" border=0 alt="跳到底部" title="跳到底部"></a>
</div>

<script type="text/javascript">
jQuery('#full-btm').click(function(){
    jQuery('html, body').animate({scrollTop:jQuery(document).height()}, 'slow');
    return false;
});
</script>

<div id="full-top" style="position:fixed; left:50%; top:520px; margin-left:495px; z-index:100; text-align:center; cursor:pointer;">
<a><img src="http://www.importnew.com/wp-content/themes/jobbolev4blog/_assets/img/back-top.png" width="20" border=0 alt="返回顶部" title="返回顶部"></a>
</div>

<script type="text/javascript">
jQuery('#full-top').click(function(){
    jQuery('html, body').animate({scrollTop:0}, 'slow');
    return false;
});
</script>

<!-- script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','/_assets/js/analytics.js','ga');

    ga('create', 'UA-15621043-1', 'jobbole.com');
    ga('send', 'pageview');

</script -->

</body>
<!-- END body -->

</html>
<!-- END html --><!-- WP Super Cache is installed but broken. The constant WPCACHEHOME must be set in the file wp-config.php and point at the WP Super Cache plugin directory. -->